package com.wg.core.weight;

/**
 * 权重项抽象基类（定义权重项的通用属性与加载行为）
 * <p>
 * 职责：
 * - 封装权重值（weight）的存储与访问
 * - 定义权重项的加载接口（从配置字符串解析数据）
 *
 * @author 少爷123
 */
public abstract class BaseWeightItem<T extends BaseWeightItem<T>> {
    /** 权重值（必须非负） */
    private int weight;

    /**
     * 获取权重值
     *
     * @return 权重值（≥0）
     */
    public final int getWeight() {
        return weight;
    }

    /**
     * 设置权重值（子类可重写以添加校验逻辑）
     *
     * @param weight 权重值（需≥0）
     * @throws IllegalArgumentException 若权重值为负数
     */
    protected void setWeight(int weight) {
        if (weight < 0) {
            throw new IllegalArgumentException("权重值不能为负数，当前值：" + weight);
        }
        this.weight = weight;
    }

    /**
     * 从配置字符串加载权重项数据（抽象方法，子类实现具体解析逻辑）
     *
     * @param configParts 配置字符串分割后的部分（如 ["param1", "param2"]）
     * @throws IllegalArgumentException 若配置格式无效
     */
    protected abstract void load(String[] configParts);
}